home *** CD-ROM | disk | FTP | other *** search
/ ETO Development Tools 4 / ETO Development Tools 4.iso / Essentials / C++ A'Link Files / 1990 / Sep 90 / CPlus.Dev$ 9⁄14⁄90 / 0202-Definitive virtual i-Sep90 < prev    next >
Encoding:
Text File  |  1991-03-06  |  2.2 KB  |  52 lines  |  [TEXT/GEOL]

  1. Item    4855308                         12-Sept-90        18:39PDT
  2.  
  3. From:   MM.XOBJ                         MacroMind, XObject Support,PRT
  4.  
  5. To:     CPLUS.DEV$                      C++ Interest List--Developers
  6.         CPLUS.APPLE$                    C++ Interest List--Apple Employees
  7.  
  8. cc:     D0776                           Dragon SW, Alan McNeil,PRT
  9.         D5543                           Resonate, Geoff Brown,PRT
  10.         D3431                           MacroMind Programmers,PRT
  11.  
  12. Sub:    Definitive virtual inlines?
  13.  
  14. I think I now have a definitive answer on the Inline vs. Virtual question.
  15.  
  16. There is no incompatibility between inlines and virtuals.  Even though “inline”
  17. means: resolve the function efficiently at compile time, and “virtual” means:
  18. defer function resolution till compile time, Lippman [p352] states:
  19.  
  20.     There are three cases in which an invocation of a virtual function is
  21.     resolved statically at compile time:
  22.  
  23.     1. When a virtual function is invoked through an object of the class type
  24.        ......
  25.     2. When a virtual function is explicitly invoked through a pointer or
  26.        reference using the class scope operator. ....
  27.  
  28.     3. When a virtual function is invoked within either the constructor or the
  29.        destructor of a base class. ....
  30.  
  31. I conclude you won't die and go to hell if you use virtual inlines.  Code
  32. generation bears this out.  You will get inlines under the three conditions
  33. mentioned above.  You will get virtuals under all other circumstances.  This
  34. means that despite the bad rap value based objects have in some circles (with
  35. overhead of implied temporaries and redundant construction/destruction), they
  36. are very attractive in that you can remain “pure” using virtuals for just about
  37. everything, and pay no calling penalty for using objects instead of object
  38. references.
  39.  
  40. Someone reported a bug due to the use of a virtual inline.  I would very much
  41. like to see an example the problem.
  42.  
  43. Haim Zamir
  44. MacroMind, Inc.
  45. AppleLink MM.XOBJ
  46.  
  47. P.S.  Static resolution in case three isn't strictly necessary, since the
  48. VTable pointer in the object physically “evolves” during construction, and
  49. “devolves” during destruction.  This prevents any possibility of accessing
  50. methods of partially constructed or destructed objects.
  51.  
  52.